package com.tduck.cloud.report.data.template;


import com.tduck.cloud.report.data.params.GroupQueryParams;
import com.tduck.cloud.report.data.params.QueryFieldListParams;
import com.tduck.cloud.report.data.params.ValueQueryParams;
import org.apache.commons.collections4.map.LinkedMap;

import java.util.List;
import java.util.Map;

/**
 * 数据查询操作
 *
 * @author tduck
 */
public interface DataSearchTemplate {


    /**
     * 分组查询 返回分组数据和聚合数据
     *
     * @param params 查询参数
     * @return 分组查询结果
     */
    List<Map> groupQuery(GroupQueryParams params);

    /**
     * 获取包含指定字段的数据 不为null 且不为"" 的数据
     *
     * @param params 参数
     * @return 字段值数量
     */
    long getFieldTotalValue(ValueQueryParams params);


    /**
     * 获取某个字段某个值的数量
     *
     * @param params 索引名称 字段名称 字段值
     * @return 字段值数量
     */
    long getFieldValueCount(ValueQueryParams params);

    /**
     * 获取字段聚合结果
     * 获取某个字段最大次数或者最小的数量等
     *
     * @param params 索引名称 字段名称 类型
     * @return 数量
     */
    Long getFieldAggregateValue(ValueQueryParams params);


    /**
     * 获取字段去重列表
     *
     * @param tableName 索引名称
     * @param fieldName 字段名称
     * @return 字段去重列表
     */
    List<Object> getFieldDistinctList(String tableName, String fieldName);

    /**
     * 查询字段列表
     *
     * @param queryFieldListParams 参数
     * @return 字段列表
     */
    List<LinkedMap> queryFieldList(QueryFieldListParams queryFieldListParams);

    /**
     * 获取省份数据分组条数
     */
    List<Map> getProvinceGroupCount(GroupQueryParams params);
}
